import { defineConfig } from 'vitepress';
import mdContainer from 'markdown-it-container';
import path from 'node:path';
import fs from 'node:fs';
import vueJsx from '@vitejs/plugin-vue-jsx';

// https://vitepress.dev/reference/site-config
export default defineConfig({
  title: ' iBiz BI报表',
  description: 'iBiz BI报表',
  lang: 'zh-CN',
  themeConfig: {
    // https://vitepress.dev/reference/default-theme-config
    lightModeSwitchTitle: '切换到浅色模式',
    darkModeSwitchTitle: '切换到深色模式',

    docFooter: {
      prev: '上一页',
      next: '下一页',
    },

    outlineTitle: '页面导航',

    socialLinks: [
      {
        icon: {
          svg: `
          <svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg">
            <title>gitee</title>
            <g fill="none" fill-rule="evenodd">
            <circle cx="16" cy="16" fill="#c71d23" r="16"/>
            <path d="m24.0987698 14.2225144h-9.0863697c-.4362899.000207-.7900048.3538292-.790326.7901191l-.0005173 1.9752185c-.0003277.4363707.353328.7902117.7896987.790326.0000712 0 .0001424 0 .0002135-.0002135l5.5317648-.0000461c.4363708-.0000102.7901221.3537352.7901257.790106 0 .0000022 0 .0000044-.0000066.0000066v.1975077.1975318c0 1.3091122-1.0612451 2.3703573-2.3703573 2.3703573h-7.5067195c-.4363081-.0000218-.790009-.353713-.7900429-.7900211l-.0002069-7.5059917c-.0001014-1.3091122 1.0611145-2.3703865 2.3702267-2.3704226.0000217 0 .0000435 0 .0000653.0000653h11.0602463c.4361793-.0004902.7898484-.35394.7906091-.79011894l.0012251-1.97521881c.0007606-.43637034-.3527683-.79033806-.7891389-.79060871-.0001634-.0000001-.0003268-.00000015-.0004901.00048976h-11.0617654c-3.27278051 0-5.92589329 2.65311278-5.92589329 5.9258933v11.0612755c0 .4363707.35374837.7901191.7901191.7901191h11.65447149c2.9454379 0 5.3331872-2.3877493 5.3331872-5.3331872v-4.5430682c0-.4363707-.3537484-.7901191-.7901191-.7901191z" fill="#fff"/>
            </g>
          </svg>`,
        },
        link: 'https://gitee.com/iBizModeling/ibiz-data-view',
      },
    ],

    nav: [{ text: '指南', link: '/guide/getting-started' }],

    sidebar: [
      {
        text: '指南',
        items: [
          {
            text: '快速开始',
            link: '/guide/getting-started',
          },
          {
            text: '结构说明',
            link: '/guide/structure-info.md',
          },
          {
            text: '选择区',
            link: '/guide/design-select.md',
          },
          {
            text: '属性区',
            link: '/guide/design-property.md',
          },
          {
            text: '预览区',
            link: '/guide/design-content.md',
          },
        ],
      },
    ],
  },
  markdown: {
    config: md => {
      md.use(mdContainer, 'demo', {
        validate(params: string) {
          return !!params.trim().match(/^demo\s*(.*)$/);
        },

        render(
          tokens: {
            nesting: number;
            info: string;
            content: string;
            type: string;
            children?: { content: string }[];
          }[],
          idx: number,
        ) {
          if (tokens[idx].nesting === 1) {
            const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
            const src = m && m.length > 1 ? m[1] : '';
            if (!src) {
              throw new Error(`未配置图片`);
            }
            const sourceFileToken = tokens[idx + 2];
            const sourceFile = sourceFileToken.children?.[0].content || '';
            let rawSource = '';
            if (sourceFileToken.type === 'inline' && sourceFile) {
              rawSource = fs.readFileSync(
                path.resolve('examples', sourceFile),
                'utf-8',
              );
            }
            if (!rawSource) {
              throw new Error(`未找到文件: ${sourceFile}`);
            }
            const splitArr = sourceFile.split('.');
            const ext = splitArr[splitArr.length - 1];
            const source = md.render(`\`\`\` ${ext}\n${rawSource}\n\`\`\``);
            return `<Demo src="${src}" rawSource="${encodeURIComponent(
              rawSource,
            )}" source="${encodeURIComponent(source)}" >`;
          } else {
            return '</Demo>';
          }
        },
      });
    },
  },
  vite: {
    plugins: [vueJsx()],
  },
});
